package com.wva.video.enums;

import lombok.AllArgsConstructor;

/**
 * @Author: hong
 * @Date: 2025/2/9 23:20:23
 */
@AllArgsConstructor
public enum RedisKey {
    /**
     * 已经上传的视频分块的md5 Map<br>
     * 键名%s是视频md5，键值是一个hash，成员的名是分块md5，成员的值总是1<br>
     * 当上传了视频的一个分块后，就会设置一个对应的成员
     */
    CHUNKS_MD5("video:upload:chunks_md5:%s"),

    /**
     * 值是一个有序列表，成员的值是未上传完毕的视频md5，分数是视频的过期时间（所有分块的过期时间都等于视频的过期时间）
     * 这个列表的目的是方便xxljob一次命令就可取出所有过期的视频，方便清除对应的分块文件
     */
    CHUNKS_DEADLINE("video:upload:chunks_deadline"),

    /**
     * 已合并的临时视频文件<br>
     * 当合并完一个视频后，就增加一个当前键，%s是视频md5<br>
     * 这个键的目的是前端轮询查看是否合并完毕 和 用户投稿后视频处理流程第一步中判断是否有这个视频然后从minIO下载下来
     */
    TEMP_VIDEO("video:upload:temp:%s"),

    /**
     * 视频已点赞用户id集合
     */
    LIKE_SET("video:like:%s"),

    /**
     * 视频已收藏用户id集合
     */
    COLLECT_SET("video:collect:%s");

    private final String formatString;

    public String format(Object... args) {
        return String.format(this.formatString, args);
    }

}
